"""
MongoDB配置文件
使用pydantic的BaseSettings来管理配置项
支持从环境变量或.env文件读取配置
"""

from pydantic_settings import BaseSettings
from typing import Optional
from functools import lru_cache


class MongoDBSettings(BaseSettings):
    """
    MongoDB数据库配置类
    """

    # MongoDB连接配置
    MONGODB_HOST: str = "localhost"
    MONGODB_PORT: int = 27017
    MONGODB_USERNAME: Optional[str] = None
    MONGODB_PASSWORD: Optional[str] = None
    MONGODB_DATABASE: str = "painter"
    
    # MongoDB连接URI(可选，可以直接使用上面的配置生成)
    MONGODB_URI: Optional[str] = None
    
    # 连接池配置
    MONGODB_MAX_CONNECTIONS: int = 10
    MONGODB_MIN_CONNECTIONS: int = 1
    
    class Config:
        env_file = ".env"  # 指定环境变量文件
        env_file_encoding = "utf-8"


class Settings(MongoDBSettings):
    """
    应用设置类，继承MongoDB配置
    后续可以在这里添加其他配置项
    """
    # 应用配置
    APP_NAME: str = "Painter"
    DEBUG: bool = False
    LOG_LEVEL: str = "INFO"


@lru_cache()
def get_settings() -> Settings:
    """
    获取缓存的配置实例
    使用lru_cache确保在整个应用中只创建一次配置实例
    """
    return Settings()


# 默认导出配置实例
settings = get_settings()